
#ifndef MsgeNode_hpp 
#define MsgeNode_hpp 

#include <cstdint>
#include <cstring>
#include <boost/asio.hpp>

const int HEAD_LENGTH = sizeof(uint16_t);

class MsgNode
{
public:

    //发送端构造函数
    MsgNode(const char * msg, uint16_t len):_total_len(len + HEAD_LENGTH),_cur_len(0)
    {
        _data = new char[_total_len + 1];
        uint16_t net_len = boost::asio::detail::socket_ops::host_to_network_short(len);
        memcpy(_data, &net_len, HEAD_LENGTH);
        memcpy(_data + HEAD_LENGTH, msg, len);
        _data[_total_len] = '\0';
    }

    //接收端构造函数
    MsgNode(uint16_t len):_total_len(len), _cur_len(0) 
    {
        _data = new char[_total_len + 1];
    }

    ~MsgNode() {
        delete[] _data;
    }

    void Clear() {
        ::memset(_data, 0, _total_len);
        _cur_len = 0;
    }

    uint16_t _cur_len;   //已经处理的长度
    uint16_t _total_len; //总共的长度
    char* _data;        
};

#endif	/* MsgeNode.hpp */